//批量修改指定文件夹下的所有文件的后缀

//例如 /file/xxx.mp4  改为  /file/xxx.jpg

var fs = require("fs");

// 获取参数（process.argv[0]是node路径，[1]是脚本路径，[2]开始才是参数）
console.log("所有参数", process.argv);
const dir = process.argv[2]; //文件夹路径

const newNameData = process.argv[3]; //获取重命名的名称

let serialNumber = process.argv[4]; //获取需要递增的序号

const mode = process.argv[5]; //获取操作类型

// 提取字符串中的所有数字并转换为整数
function extractNumbers(str) {
  const matches = str.match(/\d+/g) || [];
  return matches.map((numStr) => parseInt(numStr, 10));
}

fs.readdir(dir, (err, data) => {
  let fileList = [];
  data.forEach((v) => {
    fileList.push({
      fullPath: dir + "/" + v, //文件完整路径
      suffix: v.substring(v.lastIndexOf(".")), //文件获取后缀
    });
  });

  //排序
  fileList.sort((a, b) => {
    // 提取文件路径中的所有数字，转换为数组
    const numsA = extractNumbers(a.fullPath);
    const numsB = extractNumbers(b.fullPath);

    // 比较两个数字数组
    for (let i = 0; i < Math.min(numsA.length, numsB.length); i++) {
      if (numsA[i] !== numsB[i]) {
        return numsA[i] - numsB[i];
      }
    }

    // 如果前面的数字都相同，则较短的数组排在前面
    return numsA.length - numsB.length;
  });

  fileList.forEach((v) => {
    // 替换文件名称拼上序号 得到取新路径
    var newName = dir + "/" + newNameData + serialNumber + v.suffix;
    serialNumber++;

    //预览
    console.log(v.fullPath + " —>" + newName);

    //重命名文件
    if (mode === "rename") {
      fs.rename(v.fullPath, newName, function (err) {
        if (err) {
          throw err;
        }
      });
    }
  });
});
